package com.pubinfo.passbook.engine;

/**
 * 通用计算接口
 * <p>
 * 计算链和计算单元根据该接口实现
 */
public interface Computor<T, R> {

    /**
     * 计算方法, 接收一个T类型的计算所需数据, 和R类型的上一个计算单元输出结果.
     * <p>
     * 按照T的类型不同，会分为多种计算链。
     *
     * @param data
     * @param result
     * @return
     */
    R compute(final T data, R result);

    /**
     * 获得计算链类型
     * {@link com.pubinfo.passbook.engine.constants.ComputeChainType}
     *
     * @return
     */
    String getChainType();

    /**
     * 获得计算结果类型
     * 目前只有数值型
     * <p>
     * {@link com.pubinfo.passbook.engine.constants.ComputeResultType}
     *
     * @return
     */
    String getResultType();
}
